#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int N=4*1e5+10;
int t,n,m;
int h[N],ne[N],to[N],idx;
int used[N];
int din[N],dout[N];
vector<int> path;
void add(int x,int y)
{
	ne[idx]=h[x];
	h[x]=idx;
	to[idx++]=y;
}
void dfs(int u)
{
	for(int& i=h[u];~i;)
	{
		int k=to[i];
		if(used[i])
		{
			i=ne[i];
			continue;
		}
		int p;
		used[i]=1;
		if(t==1)
		{
			used[i^1]=1;
			p=i/2+1;
			if(i&1)
				p=-p;
		}
		else{
			p=i+1;
		}
		i=ne[i];
		dfs(k);
		path.push_back(p);
	}
}

int main()
{
	cin>>t;
	cin>>n>>m;
	memset(h,-1,sizeof(h));
	
	for(int i=0;i<m;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		add(x,y);
		din[y]++;
		dout[x]++;
		if(t==1)
		{
			add(y,x);
		}
	}

	if(t==1)
	{
		for(int i=1;i<=n;i++)
		{
			if(din[i]+dout[i]&1)
			{
				cout<<"NO"<<endl;
				return 0;
			}
		}
	}
	else{
		for(int i=1;i<=n;i++)
		{
			if(din[i]!=dout[i])
			{
				cout<<"NO"<<endl;
				return 0;
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(h[i]!=-1)
		{
			dfs(i);
			break;
		}
	}
	if(path.size()<m)
	{
		cout<<"NO"<<endl;
		return 0;
	}
	cout<<"YES"<<endl;
	for(int i=path.size()-1;i>=0;i--)
		cout<<path[i]<<' ';
	return 0;
}
